静态变量
局部变量将在运行线程达到其定义时进行初始化。按照默认方式,这件事发生在函数的每次调用中,且函数的每个调用有自己的一份局部变量副本。如果一局部变量被声明为static,那么将只有惟一的一个静态分配的对象(C.9节),它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一次到达它的定义时初始化。例如,
void f(int a)
{
while(a--) {
static int n = 0; // 初始化一次
int x = 0; // 在每个f()调用时初始化a次
cout << "n==" << n++ << ", x==" << x++ << '\n';
}
}
int main()
{
f(3);
}
这将打印出
n==0, x==0
n==1, x==0
n==2, x==0
静态变量为函数提供了一种“存储器”,使我们不必去引进可能被其他函数访问或破坏的全局变量(另见10.2.4节)。
🔚